# 装饰器作用: 不改变原有函数的基础上，给原有函数增加额外功能
# 装饰器本质是: 一个闭包函数
# 方式1: 传统方式:  变量名 = 装饰器名(原有函数名)
# 		    变量名(）


# 需求: 发表评论前先登录
# 1 定义原有函数
# 2 定义装饰器 (2-1有嵌套 2-2有引用 2-3有返回函数名 2-4新增额外功能)
# 3 测试装饰器  3-1 装饰原有函数 / 3-2 调用

# 1 定义原有函数
def comment():
    print('发表评论')


# 2 定义装饰器 (有嵌套 有引用 有返回函数名 新增额外功能)
# 2-1 外部函数
def outer(fn):

    # 2-1 内部函数
    def inner():

        # 2-4 添加额外功能
        print('请先登录...')

        # 2-2 有引用
        fn()

    # 2-3 有返回
    return inner


# 3 测试装饰器  1 装饰原有函数 / 2 调用
# 装饰原有函数
decorator =  outer(comment)
# 调用
decorator()








